【朗報】Serverless Framework v1.6.0でPythonのローカル実行がサポートされます
2017年1月31日追記
当初v1.5.2で対応すると書いていましたが、1.5.1の次期リリースは1.5.2ではなく1.6.0のようでした。失礼いたしました。
はじめに
こんにちは、中山です。
個人的に待ち望んでいた機能がリリースされそうなのでエントリにまとめたいと思います。Serverless Frameworkの次期リリースバージョンであるv1.6.0でPythonのローカル実行がマージされました。以前までは、Node.jsのみこの機能がサポートされていましたが、新しくPythonも加わったということです。ローカル実行の機能は完全にLambda関数を再現できるわけではないですが、簡単なテストとしてなら便利に使える機能です。執筆時点(2017/01/21)ではまだリリースされていませんが、早速使ってみたのでこの機能についてご紹介します。
使ってみた
上述したようにまだv1.6.0はリリースされていません。リポジトリからcloneして自分でインストールする必要があります。以下のコマンドでインストール可能です。
# リポジトリのclone $ git clone [email protected]:serverless/serverless.git Cloning into 'serverless'... remote: Counting objects: 44709, done. remote: Compressing objects: 100% (106/106), done. remote: Total 44709 (delta 35), reused 1 (delta 1), pack-reused 44602 Receiving objects: 100% (44709/44709), 71.42 MiB | 2.79 MiB/s, done. Resolving deltas: 100% (27872/27872), done. $ cd serverless $ git log ec8a55a66e0be27f8e1ebb1aa48789f7b0479a12 -1 commit ec8a55a66e0be27f8e1ebb1aa48789f7b0479a12 Merge: fe3ddb7 a163e65 Author: Eslam λ Hefnawy <[email protected]> Date: Thu Jan 19 19:40:38 2017 +0700 Merge pull request #2937 from UnitedIncome/feature/invoke-python Invoke local python functions! closes #2862 # インストール $ npm install <snip> # 確認(コミットハッシュ値は表示してくれない模様) $ ./bin/serverless version 1.5.1
正式にリリースされたら以下のコマンドでインストール可能です。
$ npm install -g serverless
環境が整ったら早速使ってみましょう。今回はテンプレートから各種ファイルを用意しておきます。
$ path/to/serverless/bin/serverless create -t aws-python -n test Serverless: Generating boilerplate... _______ __ | _ .-----.----.--.--.-----.----| .-----.-----.-----. | |___| -__| _| | | -__| _| | -__|__ --|__ --| |____ |_____|__| \___/|_____|__| |__|_____|_____|_____| | | | The Serverless Application Framework | | serverless.com, v1.5.1 -------' Serverless: Successfully generated boilerplate for template: "aws-python"
ローカルで実行してみます。
$ path/to/serverless/bin/serverless invoke local -f hello { "body": "{\"input\": {}, \"message\": \"Go Serverless v1.0! Your function executed successfully!\"}", "statusCode": 200 }
実行できました!ちなみにグローバルにインストールしたServerless Framework(v1.5.1)で実行すると以下のようにエラーが表示されます。
$ sls invoke local -f hello Serverless Error --------------------------------------- You can only invoke Node.js functions locally. Get Support -------------------------------------------- Docs: docs.serverless.com Bugs: github.com/serverless/serverless/issues Your Environment Information ----------------------------- OS: darwin Node Version: 7.1.0 Serverless Version: 1.5.1
今度はeventにデータを渡してみます。
$ path/to/serverless/bin/serverless invoke local -f hello -d "$(jo hoge=fuga)" { "body": "{\"input\": {\"hoge\": \"fuga\"}, \"message\": \"Go Serverless v1.0! Your function executed successfully!\"}", "statusCode": 200 }
eventに渡されたデータも本物のLambda関数と同じように表示されます。やりましたね。
まとめ
いかがだったでしょうか。
Serverless Frameworkの時期リリースで導入予定のPythonのローカル実行についてご紹介しました。Serverless FrameworkはNode.js製ということもあり、どうしてもPythonへのサポートは「二級市民」的な部分がありました。ただし、今回ご紹介した機能が取り込まれたように、有志の方がさまざまな便利機能を導入してくれています。今後もこのあたりの動向に注目していきたいと思います。
本エントリがみなさんの参考になれば幸いに思います。